package com.tutos.ui.student;

import java.util.ArrayList;

import com.tutos.dao.EstudianteDAO;
import com.tutos.dao.MensajeDAO;
import com.tutos.dao.MonitorDAO;
import com.tutos.model.Estudiante;
import com.tutos.model.Monitor;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.NativeButton;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;

public class MensajesRecibidosEnviadosEst extends CustomComponent {

	// Componentes gráficos
	private VerticalLayout mainLayout;
	private Button btnResponder;
	private Label areaMensaje;
	private GridLayout gridLayout;
	private TextField txtAsunto;
	private Label lblAsunto;
	private TextField txtDestinoRemitente;
	private Label lblDestinoRemitente;
	
	private ArrayList<String> correosSeleccionados = new ArrayList<String>();
	private Monitor monitorDestinatario;
	private Estudiante estudianteActual;
	
	// DAOs necesarios
	private EstudianteDAO est;
	private MonitorDAO mon;
	private MensajeDAO mensajeDAO;
	
	public MensajesRecibidosEnviadosEst(){}
	
	public MensajesRecibidosEnviadosEst(String persona, String asunto,
			String mensaje, boolean tipo) {

			buildMainLayout(mensaje, asunto);
			setCompositionRoot(mainLayout);
			setDestinatario(persona);
		
	}

	public MensajesRecibidosEnviadosEst(String persona, String asunto,
			String mensaje, EstudianteDAO est, MonitorDAO mon,
			MensajeDAO mensajeDAO, String correoDestinatario, Estudiante estudianteActual) {
		
		this.est = est;
		this.mon = mon;
		this.mensajeDAO = mensajeDAO;
		this.estudianteActual = estudianteActual;
		
		correosSeleccionados.add(correoDestinatario);
		
		buildMainLayout(mensaje, asunto);
		setCompositionRoot(mainLayout);
		setRemitente(persona);
		

	}

	private void setRemitente(String remitente) {

		lblDestinoRemitente.setValue("De:");
		txtDestinoRemitente.setValue(remitente);
		txtDestinoRemitente.setEnabled(false);
		agregarBoton();

	}

	private void setDestinatario(String destinatario) {

		lblDestinoRemitente.setValue("Para:");
		txtDestinoRemitente.setValue(destinatario);
		txtDestinoRemitente.setEnabled(false);

	}

	private void agregarBoton() {

		// btnResponder
		btnResponder = new Button();
		btnResponder.setCaption("Responder");
		btnResponder.setImmediate(true);
		btnResponder.setWidth("-1px");
		btnResponder.setHeight("-1px");

		btnResponder.addListener(new ClickListener() {

			@Override
			public void buttonClick(ClickEvent event) {
				enviar();

			}
		});

		mainLayout.addComponent(btnResponder);
		mainLayout.setComponentAlignment(btnResponder, new Alignment(34));
	}

	private void enviar() {
		
		MensajeComponenteEstudiante mensajeComponenteMonitor = new MensajeComponenteEstudiante(
				est, mon, mensajeDAO, correosSeleccionados, estudianteActual);
		

		final Window ventanaMensaje = new Window("Responder Mensaje");

		ventanaMensaje.setSizeUndefined();
		ventanaMensaje.addComponent(mensajeComponenteMonitor);
		ventanaMensaje.setWidth("580px");
		ventanaMensaje.setHeight("-1px");

		ventanaMensaje.setModal(true);
		ventanaMensaje.setResizable(false);
		
		// abrir la ventana para responder el mensaje
		getApplication().getMainWindow().addWindow(ventanaMensaje);
		ventanaMensaje.setVisible(true);
		// cerrar la ventana actual
		getApplication().getMainWindow().removeWindow(getWindow());
		

	}

	private VerticalLayout buildMainLayout(String mensaje, String asunto) {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("540px");
		mainLayout.setHeight("540px");
		mainLayout.setMargin(false);

		// top-level component properties
		setWidth("540px");
		setHeight("540px");

		// gridLayout
		gridLayout = buildGridLayout(asunto);
		mainLayout.addComponent(gridLayout);

		// areaMensaje
		areaMensaje = new Label();
		areaMensaje.setImmediate(false);
		areaMensaje.setWidth("100.0%");
		areaMensaje.setHeight("100.0%");
		areaMensaje.setContentMode(Label.CONTENT_XHTML);
		areaMensaje.setCaption("Mensaje:");
		areaMensaje.setValue(mensaje);

		mainLayout.addComponent(areaMensaje);
		mainLayout.setExpandRatio(areaMensaje, 1.0f);

		return mainLayout;
	}

	private GridLayout buildGridLayout(String asunto) {
		// common part: create layout
		gridLayout = new GridLayout();
		gridLayout.setImmediate(false);
		// gridLayout.setWidth("100.0%");
		gridLayout.setWidth("-1px");
		gridLayout.setHeight("-1px");
		gridLayout.setMargin(false);
		gridLayout.setColumns(2);
		gridLayout.setRows(2);

		// lblDestinatario
		lblDestinoRemitente = new Label();
		lblDestinoRemitente.setImmediate(false);
		lblDestinoRemitente.setWidth("-1px");
		lblDestinoRemitente.setHeight("-1px");

		gridLayout.addComponent(lblDestinoRemitente, 0, 0);
		gridLayout
				.setComponentAlignment(lblDestinoRemitente, new Alignment(34));

		// txtDestinatario
		txtDestinoRemitente = new TextField();
		txtDestinoRemitente.setImmediate(false);
		txtDestinoRemitente.setWidth("499px");
		txtDestinoRemitente.setHeight("-1px");
		gridLayout.addComponent(txtDestinoRemitente, 1, 0);

		// lblAsunto
		lblAsunto = new Label();
		lblAsunto.setImmediate(false);
		lblAsunto.setWidth("-1px");
		lblAsunto.setHeight("-1px");
		lblAsunto.setValue("Asunto:");
		gridLayout.addComponent(lblAsunto, 0, 1);
		gridLayout.setComponentAlignment(lblAsunto, new Alignment(34));

		// txtAsunto
		txtAsunto = new TextField();
		txtAsunto.setImmediate(false);
		txtAsunto.setValue(asunto);
		txtAsunto.setEnabled(false);
		txtAsunto.setWidth("100.0%");
		txtAsunto.setHeight("-1px");
		gridLayout.addComponent(txtAsunto, 1, 1);

		return gridLayout;
	}

}
